"""前面说到进程间是相互独立的，不共享内存空间，所以在一个进程中声明的变量在另一个进程中是看不到的。
这时候就要借助一些工具来在两个进程间进行数据传输了，其中最常见的就是队列了。
队列（queue）在生产消费者模型中很常见，生产者进程在队列一端写入，消费者进程在队列另一端读取。
————————————————
版权声明：本文为博主原创文章，遵循
CC
4.0
BY - SA
版权协议，转载请附上原文出处链接和本声明。
原文链接：https: // blog.csdn.net / Victor2code / article / details / 109005171
"""
# 首先创建两个函数，分别扮演生产者和消费者
import os,time
from multiprocessing import Process, cpu_count, Pool
from multiprocessing import Queue
def write_to_queue(queue):
    for index in range(5):
        print('write {} to {}'.format(str(index), queue))
        queue.put(index)
        time.sleep(1)
def read_from_queue(queue):
    while True:######死循环一值执行
        result = queue.get(True)
        print('get {} from {}'.format(str(result), queue))
if __name__ == '__main__':
    print('main process is {}'.format(os.getpid()))
    print('core number is {}'.format(cpu_count()))  # 8
    start_time = time.time()
    queue = Queue()
    pw = Process(target=write_to_queue, args=(queue,))
    pr = Process(target=read_from_queue, args=(queue,))
    pw.start()
    pr.start()
    pw.join()
    pr.terminate()############对于死循环，只能采取这种方式。
    """
    注意这里在创建子进程的时候就用元组的形式传递了参数，
    如果元组只有一个元素，记住添加逗号，否则会被认为是单个元素而不是元组。
    同时这里因为消费者pr是死循环，所以只是将生产者pw加入了阻塞，生产者pw进程执行完毕以后停止消费者pr进程。
    """
    end_time = time.time()
    print('total time is {}'.format(str(end_time - start_time)))
